<?php
/**
 * Created by PhpStorm.
 * BuyUser: u
 * Date: 2018/11/8
 * Time: 15:00
 */

namespace app\controllers;
use Lcobucci\JWT\Signer\Keychain;
use yii\web\Controller;
use Yii;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use common\services\jwt\JWT;

class TestController extends BaseController
{
    /** @var \common\logics\test\TestLogic $testService*/
    private $testService;

//     public $enableCsrfValidation=false;
//
//    public function behaviors()
//    {
//        $behaviors = [
//            'verbs' => [
//                'class' => VerbFilter::className(),
//                'actions' => [],
//            ],
//            'corsFilter' => [
//                'class' => Cors::className(),
//                'cors' => [
//                    'Origin' => ['*'],
//                    'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
//                    'Access-Control-Request-Headers' => ['*'],
//                    'Access-Control-Allow-Origin' => ['*'],
//                    'Access-Control-Allow-Credentials' => true,
//                    'Access-Control-Max-Age' => 86400,
//                    'Access-Control-Expose-Headers' => [],
//                ],
//            ],
//        ];
//        return $behaviors;
//    }

//    public function behaviors()
//    {
//        return ArrayHelper::merge(
//            [['class' => Cors::className()]], parent::behaviors());
//    }
//    public function behaviors()
//    {
//        return ArrayHelper::merge([
//            [
//                'class' => Cors::className(),
//                'cors' => [
//                    'Origin' => ['*'],
//                    'Access-Control-Allow-Origin' => ['*'],
//                    'Access-Control-Allow-Credentials' => ['*'],
//                    'Access-Control-Request-Method' => ['POST','GET', 'HEAD', 'OPTIONS'],
//                ],
//            ],
//        ], parent::behaviors());
//    }

    public function init()
    {
//        header("Origin:*");
//        header("Access-Control-Allow-Origin:*");
//        header("Access-Control-Allow-Credentials:true");
//        header("Content-Type:application/json");
//        $response = \Yii::$app->response;
//        $response->format = 'raw';
//        $response->headers->add('Content-Type', 'application/json');

//        parent::init();
//        $key = Yii::$app->params['craftsman_key'];
//        echo $key;exit;
        $this->testService = Yii::$container->get('testService');
        parent::init(); // TODO: Change the autogenerated stub
    }

    public function actionGetTest()
    {
        //这里还可以加权限判断
        //获取参数格式定义如下：
        $param = [
            'phone'=> Yii::$app->request->post('phone',''),
            'pwd' => Yii::$app->request->post('password',''),
        ];
        $result = $this->testService->getA($param,2);
        return $result;
    }
    //xiug
    public function actionTestJwt()
    {
//        include "../vendor/autoload.php";
//        $builder = new Builder();
//        $signer  = new Sha256();
//
//        $secret = "suspn@)!*";
//
//        //设置header和payload，以下的字段都可以自定义
//        $builder->setIssuer("suspn.com") //发布者
//        ->setAudience("suspn.com") //接收者
//        ->setId("abc", true) //对当前token设置的标识
//        ->setIssuedAt(time()) //token创建时间
//        ->setExpiration(time() + 60) //过期时间
//        ->setNotBefore(time() + 5) //当前时间在这个时间前，token不能使用
//        ->set('uid', 30061); //自定义数据
//
//
//       //设置签名
////        $builder->sign($signer,$secret);
//        print_r($builder->sign($signer,$secret));exit;
//        //获取加密后的token，转为字符串
//        $token = $builder->getToken();
//        print_r($token);exit;
//        $signer = new Sha256();
//        $keychain = new Keychain();

        $key = '344'; //key
        $time = time(); //当前时间
        $token = [
            'iss' => 'http://www.helloweba.net', //签发者 可选
            'aud' => 'http://www.helloweba.net', //接收该JWT的一方，可选
            'iat' => $time, //签发时间
            'nbf' => $time , //(Not Before)：某个时间点后才能访问，比如设置time+30，表示当前时间30秒后才能使用
            'exp' => $time+7200, //过期时间,这里设置2个小时
            'data' => [ //自定义信息，不要定义敏感信息
                'userid' => 1,
                'username' => '李小龙'
            ]
        ];
//        echo JWT::encode($token, $key); //输出Token
//        exit;
        $jwt = JWT::encode($token, $key);
        JWT::$leeway = 60;//当前时间减去60，把时间留点余地
        $decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式，这里要和签发的时候对应
        $arr = (array)$decoded;
        print_r($arr);

//        try {
//            JWT::$leeway = 60;//当前时间减去60，把时间留点余地
//            $decoded = JWT::decode($token, $key, ['HS256']); //HS256方式，这里要和签发的时候对应
//            print_r($decoded);exit;
//            $arr = (array)$decoded;
//            print_r($arr);
//        } catch(\Firebase\JWT\SignatureInvalidException $e) {  //签名不正确
//            echo $e->getMessage();
//        }catch(\Firebase\JWT\BeforeValidException $e) {  // 签名在某个时间点之后才能用
//            echo $e->getMessage();
//        }catch(\Firebase\JWT\ExpiredException $e) {  // token过期
//            echo $e->getMessage();
//        }catch(Exception $e) {  //其他错误
//            echo $e->getMessage();
//        }


    }
}